import { Logger, ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';
import { AllExceptionsFilter } from './filters/all-exceptions.filter';
import { HttpExceptionFilter } from './filters/http-exception.filter';
import { TransformInterceptor } from './interceptors/transform.interceptor';

async function bootstrap() {
  // 设置日志级别为详细，以便于调试
  const logger = new Logger('Bootstrap');

  const app = await NestFactory.create(AppModule, {
    logger: ['error', 'warn', 'debug', 'log', 'verbose'],
  });

  app.useGlobalPipes(
    new ValidationPipe({
      transform: true, // 启用数据转换
      // whitelist: true, // 剔除非 DTO 中定义的属性
    }),
  );
  app.useGlobalInterceptors(new TransformInterceptor());

  // 注册全局异常过滤器（顺序很重要，先注册全局异常过滤器，再注册HTTP异常过滤器）
  app.useGlobalFilters(new AllExceptionsFilter(), new HttpExceptionFilter());

  app.enableCors(); // 启用CORS
  app.setGlobalPrefix('api'); // 添加全局前缀

  // 配置Swagger文档
  const config = new DocumentBuilder()
    .setTitle('酒店预订系统API')
    .setDescription('酒店预订系统的所有API接口文档')
    .setVersion('1.0')
    .addTag('users', '用户管理')
    .addTag('auth', '认证管理')
    .addTag('hotels', '酒店管理')
    .addTag('rooms', '房间管理')
    .addTag('orders', '订单管理')
    .addTag('payments', '支付管理')
    .addBearerAuth()
    .build();

  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api-docs', app, document);

  await app.listen(3000);
  logger.log('应用已启动: http://localhost:3000/api');
}
bootstrap();
